﻿#ifndef _ADAS_OUT_
#define _ADAS_OUT_

#define MAX_MSGS  32
struct can_msg_task{
	int msg_count;   /* 发送的报文个数 */
	struct _can_msg_t{
		unsigned int id;  /* bit31=0:stand msg,  bit31=1:extend msg */
	    unsigned char data[8];
	}msg[MAX_MSGS];
};

typedef struct {
	int id;         /* 障碍物ID, 0~15. 跟踪障碍物时, ID保持不变 */
	int obj_class;  /* 障碍物类型 
		             *  0: car
			     	 *  1: truck
					 *  2: ped
		             */
	float obj_x;    /* 横坐标, 右边为正轴. 单位: m, 范围: -40.96m ~ 40.96m */
	float obj_y;    /* 纵坐标, 单位: m, 范围: 0 ~ 160m */
	float obj_x_vrel;  /* x轴相对速度分量. 单位: m/s,  范围: -51.2m/s ~ 51.1m/s */
	float obj_y_vrel;  /* y轴相对速度分量. 单位: m/s,  范围: -128m/s ~ 128m/s */
	float obj_width;   /* 障碍物宽度. 单位: m, 范围: 0 ~ 6.4m */
}__object_t;

/* x = c3*y^3 + c2*y^2 + c1*y + c0 */
typedef struct {
	int valid; /* 车道线是否有效, 0=无效, 1=有效 */
	int quality;
	int type;
	float c0;
	float c1;
	float c2;
	float c3;
	float mark_width;
}__lane_t;

	
#define OUT_OBJS  16
typedef struct {
	int objs;
	__object_t object[OUT_OBJS];
    __lane_t lane[2];  /* [0]=left lane,  [1]=right lane */
}obj_out_t;


typedef struct {
	int  fcw_level;   /* 前车碰撞预警级别, 0:无预警, 1:预碰撞预警, 2:碰撞预警 */
	int  hmw_level;   /* 车距监测预警级别, 0:未检测到前车, 1:检测到前车且无预警, 2:一级车距监测预警, 3:二级车距监测预警 */
	int  ldw;         /* 车道偏离预警, 0:无预警, 1:左车道偏离预警, 2:右车道偏离预警 */
	int  headway;     /* 车头时距, 单位:0.1s/bit, 范围:0-9.9s, 时距无效时该值为 -1 */
	int  ldw_on;      /* LDW开关, 0:关闭LDW, 1:开启LDW */
	int  car_on;      /* 车辆检测开关, 0:停止检测前车, 1:开启前车相关的预警 */
	int  ufcw;        /* 溜车预警, 0:无预警, 1:预警 */
	int  car_follow;  /* 跟车提醒, 0:无跟车提醒, 1:有跟车提醒 */
	int  drive_status; /* 驾驶状态， 0：在道路中间行驶， 1：正在变向左边的车道， 2：正在变向右边的车道 */
	int  left_lane;    /* 左车道线检测状态， 0：未检测到左车道线， 1：检测到左车道线 */
	int  right_lane;   /* 右车道线检测状态， 0：未检测到右车道线， 1：检测到右车道线 */
	int  front_distance;  /* 前车距离, 单位：0.01m/bit， 范围：0-200m, 距离无效时值为-1 */
	int  front_speed;     /* 前车相对速度, -500Km/h ~ 500Km/h , 单位: 1/128kmph/bit, 前车距离无效时该值为0 */
	int  speed_limit;     /* 限速牌, 0: 无限速牌, >0:表示限速值,单位km/h, -1:表示解除所有限速, 其他负数表示解除的限速值 */
	
	/* 应用程序不需要设置以下汽车信号值 */
	int  speed;           /* 本车车速, 0-500Km/h, 单位: 1/128kmph/bit */	
	int  left_light;      /* 左转向灯状态, 0:熄灭, 1:闪烁, 无效值：-1 */
	int  right_light;     /* 右转向灯状态, 0:熄灭, 1:闪烁, 无效值：-1 */
	int  brake;           /* 刹车状态, 0:未刹车, 1:已刹车, 无效值：-1 */
}adas_out_t;


int    open_adas_script(const char *script, int (*can_write)(unsigned int, unsigned char*, int));
void   close_adas_script(void);
int    script_execute(adas_out_t *output, struct can_msg_task *task, int inc_ms);
void   can_set_output(adas_out_t *output,  obj_out_t *info);
unsigned char  get_canoutput_version(void);

#endif
